//         1        ===> 1
//     2       4    ===> 4
// 3       5        ===> 5

const symmetricalTree = {
    val: 8,
    left: {
      val: 6,
      left: { val: 5, left: null, right: null },
      right: { val: 7, left: null, right: null }
    },
    right: {
      val: 6,
      left: { val: 7, left: null, right: null },
      right: { val: 5, left: null, right: null }
    }
  }
  
  function rightView(root) {
    if (!root) return [];
    const queue = [];
    const arrRS = [];
    // 先保存根结点，也就是第一层二叉树
    queue.push(root);
    while (queue.length > 0) {
      // 表示的是上一层的节点的数量
      let temp = null;
      // 遍历上一层节点，将它们的子节点加入队列中，收集得到二叉树的下一层
      for (let i = 0; i < queue.length; i++) {
        // 出队列，并获得返回的父节点
        const node = queue.shift();
        // 每次都用当前节点的val覆盖temp
        // temp最后会等于当前层最右的一个非空节点的val值
        if (node.val) temp = node.val;
        // 收集当前节点的左节点和右节点，从而得到下一层
        if (node.left) queue.push(node.left);
        if (node.right) queue.push(node.right);
      }
      // 收集每一层的最右节点  // 每次遍历完都是拿到的最右侧节点
      arrRS.push(temp);
    }
    return arrRS;
  };
  
  console.log(rightView())